﻿#ifndef SETTINGPAGE_H
#define SETTINGPAGE_H
#include <ProcessInfoStartuct.h>
#include <qabstractanimation.h>
#include <QFileInfoList>
#include <QTime>
#include <QDate>
#include <QTextCodec>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonParseError>
#include <QJsonValue>
#include <QJsonValueRef>
#include <QJsonValueRefPtr>
#include <QJsonValuePtr>
#include "SettingPage_global.h"

class SETTINGPAGE_EXPORT SettingPage {
private:
	QHash<QString, QJsonDocument*> fileMap;
	QString defaultAbsoluteFilePath;
	QList<QString> envVectorPath;
	const char* findPath = "path";
#if defined(Q_OS_WIN)
	const char* executionEndsWith = ".exe";
#elif defined(Q_OS_LINUX)
	const char* executionEndsWith = "";
#endif
private:
	// 从 QJsonObject 获取 ProcessInfoStartuct::CallData
	ProcessInfoStartuct::CallData* getCallData(const QJsonObject& jsonObject);
	// 从 QJsonObject 中设置到 dateTime，compDateStaus 是否才用日期
	int formatDateTime(const QJsonObject& jsonObject
		, QTime& dateTime);
	// 获取 其他属性
	// count 调用次数
	// reStart 启动失败重启次数
	// forceClose 强制关闭未结束程序
	int getOtherArrt(const QJsonObject& jsonObject
		, qint64& count
		, qint32& reStart
		, qint32& forceClose);
	// 从 QJsonDocument 格式中获取对象列表
	void formProcessMapObjs(const QJsonDocument& jsonDoc
		, QHash<QString, ProcessInfoStartuct*>& processMap);
	// 从 QJsonObject 中获取 进程路径与参数
	ProcessInfoStartuct* formProcessData(const QJsonObject& jsonObject);
	int saveDefaultFileToDisc(const QString& absoluteFilePath
		, const QString& absolutePath
		, QByteArray& byteArray);
public:
	SettingPage( );
	~SettingPage( );
	// 追加一个配置文件，并且把数据存储到 processMap 上
	int appSettingFile(const QString& file
		, QHash<QString, ProcessInfoStartuct*>& processMap);
	// 释放配置文件
	int releaseFile(const QString& fileName);
	// 环境变量
	QMultiHash<QString, QString> env;
};
#endif // SETTINGPAGE_H
